#ifndef DATABASE_H
#define DATABASE_H

#include <sqlite3.h>
#include <stdint.h>

#define MAX_PATH_LEN 4096
#define MD5_HASH_LENGTH 32

typedef struct {
    char file_name[MAX_PATH_LEN];
    int64_t file_size;
    char file_hash[MD5_HASH_LENGTH + 1];
} FileInfo;

/**
 * 初始化数据库连接
 * @param db_path 数据库文件路径
 * @param db 输出的数据库连接指针
 * @return SQLITE_OK表示成功，其他值表示失败
 */
int db_initialize(const char *db_path, sqlite3 **db);

/**
 * 检查文件是否存在于数据库中
 * @param db 数据库连接
 * @param file_path 文件路径
 * @return 1表示存在，0表示不存在
 */
int db_file_exists(sqlite3 *db, const char *file_path);

/**
 * 插入或更新文件信息
 * @param db 数据库连接
 * @param file_info 文件信息结构体
 * @return SQLITE_OK表示成功，其他值表示失败
 */
int db_insert_or_update_file(sqlite3 *db, const FileInfo *file_info);

/**
 * 清理数据库中不存在的文件记录
 * @param db 数据库连接
 * @return SQLITE_OK表示成功，其他值表示失败
 */
int db_delete_nonexistent_files(sqlite3 *db);

/**
 * 查找重复文件
 * @param db 数据库连接
 * @return SQLITE_OK表示成功，其他值表示失败
 */
int db_find_duplicate_files(sqlite3 *db);

#endif // DATABASE_H
